SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[pje_porCursosDictados] @idInscripcion as integer ,@pje as float output,@resultado as int  AS

set nocount on

declare  @idAgente as int,@idCargoGenerico as int,@idAsignaturaGenerica as int, @idTipoConvocatoria as int ,@idlocalidad as int
declare @incumbe as integer --0=si 1=no incumbe
declare @FechaLimite as datetime
declare @Descripcion as varchar(100),@horas int,@fecha as datetime,@tipoDeEntidad as int
declare  @Aprobado as varchar(1),@CursoOCap as  int,@ValeComoCurso varchar(1),@Cargogen as int,@AsigGen as int,@IdCapAg as int
declare @pjeAuxiliar  as float , @pjeCursosDictados as float,@pjeRepeticiones as float,  @pjeCursosDictadosOfic as float, @pjeCursosDictadosPriv as float,  @topeCursosDictadosOfic as float,@topeCursosDictadosPriv as float,@topeCursosDictados as float
declare @descripcionAnterior as varchar(100)
declare @horasAnterior as int
declare @TipoEntidad as int --1 es oficial
declare @nivel_insc as int,@ciclo as int,@grupoIncumbencia as int , @grupoIncumbencia2 as int
DECLARE @Error INT


BEGIN TRANSACTION
SET @ERROR=0

select @topeCursosDictados= (select valor1 from tb_parametros where idparametro=51)
set @topeCursosDictadosOfic = isnull(@topeCursosDictadosOfic ,9999) --si no tiene tope le asigno uno imposible de superar
set @topeCursosDictadosPriv = isnull(@topeCursosDictadosPriv ,9999) --si no tiene tope le asigno uno imposible de superar

print  @topeCursosDictadosOfic
print  @topeCursosDictadosPriv

select  @idAgente=i.Agente,@IdcargoGenerico = i.CargoGenerico,@AsigGen=i.AsignaturaGenerica,@idtipoConvocatoria=Conv.TipoConvocatoria,@FechaLimite=Conv.FechaLimite,@nivel_insc = i.nivel,@ciclo=ciclo
	from 
	tb_inscripcionesConvocatorias i 
		join tb_Convocatorias conv on i.Convocatoria=conv.idConvocatoria 
	where i.idInscripcionConvocatoria=@idInscripcion

	declare c cursor FORWARD_ONLY FOR
                select  Cur.Descripcion,Cur.horas,cur.fecha,cur.TipoEntidad --h.Cargogenerico,h.AsignaturaGenerica,Cur.idCursoDictado
		from
		tb_cursosDictados Cur
--		join tb_gruposDeIncumbencias G on G.idGrupoIncumbencia=Cur.GrupoIncumbencia
--		join tb_incumbencias h on G.idGrupoIncumbencia=h.grupoIncumbencia
		join tb_gruposDeIncumbencias G on G.idGrupoIncumbencia=Cur.GrupoIncumbencia
--		join tb_reluniongsgu R on r.idgrupounion = G.idGrupoIncumbencia
		join tb_incumbencias h on G.idGrupoincumbencia=h.grupoIncumbencia
--		join tb_entidadesCapacitadoras Ent on Cur.entidad=Ent.idEntidad
--		join tb_tipoEntidadCapacitadora T on Ent.tipoEntidad=T.id								--supongo que si Cap.CursoOCapacitacion = 1 se trata de una Capacitacion, si Cap.CursoOCapacitacion = 2 esCurso Dictado y si Cap.CursoOCapacitacion = 3 se trata de un curso realizado 						
		where agente=@idAgente and h.CargoGenerico=@idCargogenerico and h.AsignaturaGenerica=@AsigGen and Cur.FechaPresentacion <= @FechaLimite  
		order by Cur.Descripcion

		SET @Error = @@ERROR 
		IF @Error <> 0 GOTO Salir

	open c
	fetch next from c into @Descripcion,@horas ,@fecha,@TipoEntidad--@Cargogen ,@AsigGen ,@IdCapAg 

	set @pjeAuxiliar=0
	set @pjeCursosDictadosOfic = 0
	set @pjeCursosDictadosPriv = 0
	set @descripcionAnterior='****** '
	set @horasanterior =0 
	
	while @@FETCH_STATUS = 0
	begin
		set @pjeAuxiliar=0
		if @Descripcion  <> @descripcionAnterior   or @horasAnterior <> @horas
		begin
			set @horasanterior =@horas 
			set  @descripcionAnterior=@Descripcion 
			if @horas > 80 set @pjeAuxiliar= round( ((1.5+(@horas - 80)*0.0068182))*1.5,3)
			else set @pjeAuxiliar=   round(((0.5+(@horas - 10)*0.0142859))*1.5,3)
			--print 'puntaje auxiliar' + cast(@pjeAuxiliar as varchar)
		end

		if @TipoEntidad<>1
			set @pjeCursosDictadosOfic = @pjeCursosDictadosOfic+ @pjeAuxiliar	
		else
			set @pjeCursosDictadosPriv = @pjeCursosDictadosPriv+ @pjeAuxiliar	
		--print 'puntaje oficiales ' + cast(@pjeCursosDictadosOfic as varchar)
		--print 'puntaje Privados ' + cast(@pjeCursosDictadosPriv as varchar)
		
		fetch next from c into @Descripcion,@horas,@fecha,@TipoEntidad --,@Aprobado,@CursoOCap,@ValeComoCurso ,@Cargogen ,@AsigGen ,@tipoDeEntidad,@IdCapAg
	    end
	close c
	deallocate c
	set @resultado = 0

--print 'puntaje oficiales ' + cast(@pjeCursosDictadosOfic as varchar)
--print 'puntaje Privados ' + cast(@pjeCursosDictadosPriv as varchar)

set @pjeCursosDictados=@pjeCursosDictadosOfic+@pjeCursosDictadosPriv

if @pjeCursosDictados > @topeCursosDictados set @pjeCursosDictados=@topeCursosDictados

set @pje= @pjeCursosDictados

print @pje

Salir:
IF @Error <> 0 
	ROLLBACK TRANSACTION
ELSE 
	COMMIT TRANSACTION
GO
GRANT EXECUTE ON  [dbo].[pje_porCursosDictados] TO [Juntas]
GO
